package com.znyj.cloud.chain.util;

import com.alibaba.fastjson.JSONObject;
import io.netty.handler.codec.http.HttpRequest;
import org.apache.commons.lang.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

/**
 * Created by gaoliwei on 14-10-8.
 */
public class SignatureUtil {
//
//    private static final String SIGNATURE_KEY = "sign";
//    private static final String SALT = "As8f9sdf8w9c*f%";
//
//    private final static char[] mChars = "0123456789ABCDEF".toCharArray();
//
//    private static String assembleBytes2HexStr(byte[] bytes) {
//        if (bytes.length == 0) {
//            return "";
//        }
//        StringBuilder builder = new StringBuilder();
//        for (byte b : bytes) {
//            builder.append(mChars[(b & 0xFF) >> 4]);
//            builder.append(mChars[b & 0x0F]);
//        }
//
//        return builder.toString();
//    }
//
//    /**
//     * 生成MD5码
//     *
//     * @param input 输入的字符串
//     * @return
//     */
//    public static String MD5(String input) {
//        try {
//            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
//
//            byte[] inputByteArray = input.getBytes();
//            messageDigest.update(inputByteArray);
//            byte[] resultByteArray = messageDigest.digest();
//
//            return assembleBytes2HexStr(resultByteArray);
//        } catch (NoSuchAlgorithmException e) {
//            e.printStackTrace();
//        }
//        return "md5Error";
//    }
//
//    /**
//     * 生成params的一个有序String
//     *
//     * @param params
//     * @return
//     */
//    private static String assembleOriginString(List<String> params) {
//        StringBuilder builder = new StringBuilder();
//
//        Collections.sort(params);
//        for (String param : params) {
//            builder.append(param);
//        }
//
//        builder.append(SALT);
//
//        return builder.toString();
//    }
//
//    /**
//     * 生成sign
//     *
//     * @param params
//     * @return
//     */
//    public static String genSignature(List<String> params) {
//        String originString = assembleOriginString(params);
//        return MD5(originString);
//    }
//
//    private static Map<String, String> genSignatureParams(List<String> params) {
//
//        String signature = genSignature(params);
//
//        Map<String, String> signatureParams = new HashMap<String, String>();
//        signatureParams.put(SIGNATURE_KEY, signature);
//
//        return signatureParams;
//    }
//
//    private static String getParamValue(Map params, String key) {
//        Object value = params.get(key);
//        if (value == null) {
//            return null;
//        }
//        return ((String[]) value)[0];
//    }
//
//    private static String[] getParamValues(Map params, String key) {
//        Object value = params.get(key);
//        if (value == null) {
//            return new String[0];
//        }
//        return ((String[]) value);
//    }
//
//    public static boolean validSignature(HttpRequest request) {
//        JSONObject data = HttpUtil.getJsonData(request);
//
//        String clientSign = data.getString(SIGNATURE_KEY);
//        if (null == clientSign || StringUtils.isEmpty(clientSign)) {
//            return false;
//        }
//
//        List<String> params = new ArrayList<String>();
//        for (Map.Entry<String, Object> entry : data.entrySet()) {
//            if (entry.getKey() == SIGNATURE_KEY) {
//                continue;
//            }
//            System.out.println(entry.getValue().toString());
//            params.add(entry.getValue().toString());
//        }
//
//        String serverSign = genSignature(params);
//        return clientSign.equalsIgnoreCase(serverSign);
//    }
//
//    /**
//     * 验证request是否合法
//     *
//     * @param request
//     * @return
//     */
//    public static boolean validSignature(HttpServletRequest request) {
//        Map<String, String[]> params = request.getParameterMap();
//
//        List<String> paramList = new ArrayList<String>();
//        for (Map.Entry<String, String[]> entry : params.entrySet()) {
//            if (!SIGNATURE_KEY.equals(entry.getKey())) {
//                Collections.addAll(paramList, getParamValues(params, entry.getKey()));
//            }
//        }
//
//        String signature = genSignature(paramList);
//        String signatureGet = getParamValue(params, SIGNATURE_KEY);
//
//        return signature.equals(signatureGet.toUpperCase());
//    }
//
//    public static void main(String[] args) {
//        List<String> params = new ArrayList<String>();
//        params.add("123");
//        params.add("abc");
//        params.add("true");
//        Map<String, String> map = SignatureUtil.genSignatureParams(params);
//
//        StringBuilder builder = new StringBuilder();
//
//
//        for (Map.Entry<String, String> entry : map.entrySet()) {
//            builder.append("&");
//            builder.append(entry.getKey());
//            builder.append("=");
//            builder.append(entry.getValue());
//        }
//
//        System.out.println(builder.toString());
//    }
}
